package com.blankii.androidlibrary.utils

import android.content.Context
import android.content.pm.ApplicationInfo
import android.os.Build
import android.os.Build.VERSION_CODES.S
import android.os.Build.VERSION_CODES.S_V2
import android.os.Build.VERSION_CODES.TIRAMISU
import android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE


/**
 * author: blankii
 * created on: 2024/4/10 10:51
 * description:
 */
object VersionUtils {
    /**
     * 判断当前应用是否是debug状态
     */
    fun isApkInDebug(context: Context): String {
        return try {
            val info = context.applicationInfo
            if (info.flags and ApplicationInfo.FLAG_DEBUGGABLE != 0) {
                "DEBUG"
            } else {
                "RELEASE"
            }
        } catch (e: Exception) {
            "Build Type 获取异常"
        }
    }
    /**
     * 获取应用versionName 例：1.0
     */
    fun getPacketVersionName(context: Context): String {
        val packInfo = context.packageManager.getPackageInfo(context.packageName, 0)
        return packInfo.versionName
    }

    /**
     * 获取应用versionCode 例如 1 2 3
     */
    fun getPacketVersionCode(context: Context): String {
        val packInfo = context.packageManager.getPackageInfo(context.packageName, 0)
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
            return packInfo.longVersionCode.toString()
        } else {
            return packInfo.versionCode.toString()
        }
    }


    fun getAndroidSDKVersion(): Int {
        return Build.VERSION.SDK_INT
    }

    fun getAndroidVersion(): String {
        when (getAndroidSDKVersion()) {
            21 -> {
                return "Android 5.0"
            }

            22 -> {
                return "Android 5.1\n" + "特点:Jetpack Compose运行最低版本，minSDK 必须>=21"
            }

            23 -> {
                return "Android 6"
            }

            24 -> {
                return "Android 7.0"
            }

            25 -> {
                return "Android 7.1"
            }

            26 -> {
                return "Android 8.0"
            }

            27 -> {
                return "Android 8.1"
            }

            28 -> {
                return "Android 9"
            }

            29 -> {
                return "Android 10"
            }

            30 -> {
                return "Android 11"
            }

            31 -> {
                return "Android 12"
            }

            32 -> {
                return "Android 12L"
            }

            33 -> {
                return "Android 13"
            }

            34 -> {
                return "Android 14"
            }

            35 -> {
                return "Android 15"
            }

            else -> {
                return "该版本未收录"
            }
        }
    }

    /**
     * 是否是 Android 14 及以上版本 SDk=34
     */
    fun isAndroid14(): Boolean {
        return Build.VERSION.SDK_INT >= UPSIDE_DOWN_CAKE
    }

    /**
     * 是否是 Android 13 及以上版本 SDk=33
     */
    fun isAndroid13(): Boolean {
        return Build.VERSION.SDK_INT >= TIRAMISU
    }

    /**
     * 是否是 Android 12L 及以上版本 SDk=32
     */
    fun isAndroid12L(): Boolean {
        return Build.VERSION.SDK_INT >= S_V2
    }

    /**
     * 是否是 Android 12 及以上版本 SDk=31
     */
    fun isAndroid12(): Boolean {
        return Build.VERSION.SDK_INT >= S
    }

    /**
     * 是否是 Android 11 及以上版本 SDk=30
     */
    fun isAndroid11(): Boolean {
        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.R
    }

    /**
     * 是否是 Android 10 及以上版本 SDk=29
     */
    fun isAndroid10(): Boolean {
        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q
    }

    /**
     * 是否是 Android 9.0 及以上版本 SDk=28
     */
    fun isAndroid9(): Boolean {
        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.P
    }

    /**
     * 是否是 Android 8.0 及以上版本 SDk=26
     */
    fun isAndroid8(): Boolean {
        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.O
    }

    /**
     * 是否是 Android 7.0 及以上版本 SDk=24
     */
    fun isAndroid7(): Boolean {
        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
    }

    /**
     * 是否是 Android 6.0 及以上版本 SDk=23
     */
    fun isAndroid6(): Boolean {
        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
    }
}